/**
 * 模板管理API
 */

import type {
  TemplateDownloadStatsQuery,
  TemplatePageQuery,
  TemplateRequest,
  TemplateSearchQuery,
  TemplateVO
} from "./type"
import { http } from "@/http/index"

/** 模板管理API */
export const templatesApi = {
  /**
   * 获取模板列表
   * @param params 查询参数
   */
  getTemplates: (params: TemplatePageQuery = {}) => {
    return http.get<PageData<TemplateVO>>("/templates", { params })
  },

  /**
   * 获取模板详情
   * @param templateId 模板ID
   */
  getTemplateDetail: (templateId: number) => {
    return http.get<TemplateVO>(`/api/templates/${templateId}`)
  },

  /**
   * 创建模板
   * @param params 模板配置参数
   */
  createTemplate: (params: TemplateRequest) => {
    return http.post<number>("/templates", params)
  },

  /**
   * 更新模板
   * @param templateId 模板ID
   * @param params 模板配置参数
   */
  updateTemplate: (templateId: number, params: TemplateRequest) => {
    return http.put<void>(`/api/templates/${templateId}`, params)
  },

  /**
   * 删除模板
   * @param templateIds 模板ID列表
   */
  deleteTemplates: (templateIds: number[]) => {
    return http.delete<void>("/templates", { data: templateIds })
  },

  /**
   * 搜索模板
   * @param params 搜索参数
   */
  searchTemplates: (params: TemplateSearchQuery) => {
    return http.get<PageData<TemplateVO>>("/templates/search", { params })
  },

  /**
   * 获取推荐模板
   * @param limit 限制数量
   */
  getRecommendedTemplates: (limit?: number) => {
    return http.get<TemplateVO[]>("/templates/recommended", {
      params: { limit }
    })
  },

  /**
   * 获取热门模板
   * @param limit 限制数量
   */
  getPopularTemplates: (limit?: number) => {
    return http.get<TemplateVO[]>("/templates/popular", {
      params: { limit }
    })
  },

  /**
   * 下载模板
   * @param templateId 模板ID
   */
  downloadTemplate: (templateId: number) => {
    return http.post<void>(`/api/templates/${templateId}/download`)
  },

  /**
   * 模板评分
   * @param templateId 模板ID
   * @param rating 评分
   * @param userId 用户ID
   */
  rateTemplate: (templateId: number, rating: number, userId: number) => {
    return http.post<void>(`/api/templates/${templateId}/rate`, null, {
      params: { rating, userId }
    })
  },

  /**
   * 克隆模板
   * @param templateId 模板ID
   * @param newTemplateName 新模板名称
   * @param newTemplateCode 新模板编码
   */
  cloneTemplate: (templateId: number, newTemplateName: string, newTemplateCode: string) => {
    return http.post<number>(`/api/templates/${templateId}/clone`, null, {
      params: { newTemplateName, newTemplateCode }
    })
  },

  /**
   * 导入模板
   * @param filePath 文件路径
   */
  importTemplate: (filePath: string) => {
    return http.post<Record<string, any>>("/templates/import", null, {
      params: { filePath }
    })
  },

  /**
   * 导出模板
   * @param templateId 模板ID
   */
  exportTemplate: (templateId: number) => {
    return http.get<string>(`/api/templates/${templateId}/export`)
  },

  /**
   * 获取模板下载统计
   * @param params 统计查询参数
   */
  getTemplateDownloadStats: (params: TemplateDownloadStatsQuery) => {
    return http.get<Record<string, any>>(`/api/templates/${params.templateId}/statistics/downloads`, {
      params: { days: params.days }
    })
  },

  /**
   * 获取模板分类统计
   */
  getTemplateTypeStats: () => {
    return http.get<Record<string, any>>("/templates/statistics/types")
  },

  /**
   * 检查模板编码唯一性
   * @param templateCode 模板编码
   * @param excludeTemplateId 排除的模板ID
   */
  checkTemplateCodeUnique: (templateCode: string, excludeTemplateId?: number) => {
    return http.get<boolean>("/templates/check-code", {
      params: { templateCode, excludeTemplateId }
    })
  }
}

export * from "./type"
